qt

这篇博客主要探讨了QT编程中的多个问题,包括子线程执行程序、设置QWidget背景图片、Qt事件处理流程、信号与槽机制的使用、线程间通信、QByteArray操作、文本文件读写、QTimer、事件过滤器、绘图设备类应用以及Qt中的错误处理等方面。还涉及了Qt中的数据结构、字符串处理、文件操作、内存管理和多线程等概念。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >





313、qt为了处理复杂程序,防止该程序阻碍主线程,可以利用子线程执行该程序?
答、对。
314、问如何为qwidget窗口,设置自适应窗口大小的背景图片?
答、 QPalette palette; 
     QPixmap pixmap;
    pixmap.load(":/new/prefix1/8.jpg");
    this->setAutoFillBackground(true);
   palette.setBrush(QPalette::Window,QBrush(pixmap.scaled(this->size(),Qt::IgnoreAspectRatio,Qt::SmoothTransformation)));
   this->setPalette(palette);
315、raster?
答、光栅。
316、backends?
答、后端。
317、premade?
答、预先的。
318、实现改变widget窗体背景图片的代码?
答、QWidget *widget = new QWidget();
     widget->setAutoFillBackground(true);
     QPalette palette;
     QPixmap pixmap(":/Resources/Penguins.jpg");
     palette.setBrush(QPalette::Window, QBrush(pixmap));
     widget->setPalette(palette);
     widget->show();
319、问如何在qt中正确地睡眠?
答、QTimer t;
t.start();
while(t.elapsed()
320、问qt中事件过滤器的作用?
答、事件过滤器是控制过滤控件捕捉信号。例如设置了事件过滤器,鼠标点击事件,即可以被widget窗口捕捉,也能屏蔽widget窗口,使得信号被qpushbutton控件捕捉。当widget和button重叠时,就能屏蔽widget使得button捕捉到信号。
321、简述qt中事件处理的流程?
答、首先是qwidget,然后是event()函数,event函数再向下分发。
822、qt使用绘图设备类绘图只能在paintevent中和构造函数中进行?
答、对。但是如果绘图设备是this(本程序的窗口)就没必要。
823、问qt中的绘图设备指的是什么?
答、将图片画在什么地方,如果是当前程序运行后的窗口,绘图设备就是this,也可以通过QImage或QPixmap创建绘图设备对象。
824、如果一个qt中元素太多,有些效果不会出现?
答、对。
825、问qmessagebox采用静态函数的调用方式是模态的吗?
答、是的。如果想用非模态的,要用对象调用成员函数的方式编程。
826、问qt中如何使用qDebug打印中文?
答、QString str;
    str=str.fromLocal8Bit("模态对话框");
827、给出弹出文件对话框的代码?
答、QAction *p5=menu->addAction("文件对话框");
connect(p5,&QAction::triggered,
[=]()
{
QString path=QFileDialog::getOpenFileName(this,"open","../","source(*.cpp *.h);;Text(*.txt);;all(*.*)");

}
);


828、问弹出是否保存、帮助对话框的代码是什么?
答、QMessageBox::about(this,"about","关于qt");重点是about。
829、QT中非模态对话框实现的核心代码?
答、connect(p1,&QAction::triggered,[=]{
QDialog *p=new QDialog;
p->setAttribute(Qt::WA_DeleteOnClose);
p->show();
});


connect(p1,&QAction::triggered,[=]{
dlg.show();//dlg是主窗口的成员变量。
});
830、给出模态对话框的核心代码?
答、connect(p1,&QAction::triggered,[=]{
QDialog dlg;
dlg.exec();

});
831、所有控件的move函数的参考点坐标都是一样的?
答、不正确。主窗口相对于屏幕、子窗口相对于父窗口。
832、问
...
connect(b4,&QPushButton::released,[=]()
{
qDebug()<<"1111";
qDebug()<<a<<b;
a=11;
}
...
其中[=]、[&]的作用?如果released函数有参数,lamda表达式也必须要有参数吗?
答、=号是将外部所有变量、函数以值传递方式传递到lamda表达式的作用域中。=号使用是安全的。
[&]是将外部所有变量以引用方式传递到lamda表达式中。[&]的方式可能会出问题,是不安全的使用方式。
信号和槽函数的参数是一致的,而且会由信号向槽传递,lamda表达式是槽函数,也遵循这样的规则。
833、问connect(&subWin,SIGNAL(mySignal()),this,SLOT(ok()));
connect(&subWin,&SubWidget::mySignal,this,&MainWidget::dealsub);
?
哪种写法比较可靠?
答、第二种。第一种是QT4的语法,第二种是QT5的语法。第一种SIGNAL(mySignal())、以及SLOT(ok())会将函数名转换成字符串;编译器不会对函数名进行检查,即使写错了,也不会。只会在执行时出错。(注意联系834)
834、问qt中如果信号重载,如何知道connect时调用了哪个信号?
答、可采用方案:通过函数指针,例如:
void(SubWidget::*funSignal)()=&SubWidget::mySignal;
void(SubWidget::*testSignal)(int,QString)=&SubWidget::mySignal(int,QString);
835、问qt的信号函数需要定义吗?调用qt的信号函数的代码?
答、不需要。emit。
836、问qt的信号和槽函数有相同的参数吗?
答、有。
837、问qt中信号和槽有返回值吗?
答、没有。
838、问qt的QApplication app(argc,argv);中app是什么?
答、应用程序类的对象。
839、问qt中的能使用信号和槽的类中存在connect函数,该函数是信号和槽,但是通信时客户端也要使用connect连接,如果要在这样的类的成员函数中使用connect函数进行连接通信,如何解决冲突问题?
答、通过使用::connect,来避免在类的成员函数中使用信号和槽的connect函数,转而使用外作用域的connect进行通信连接。
840、问getsockname函数的作用?
答、获得本机的端口号和ip地址。
841、问信号和槽在主线程和子线程中的作用?
答、信号和槽机制可以将子线程的数据传给主线程。
842、QT中如果对象属于主进程,则该对象所属的所有槽函数都在主进程执行?
答、对。
843、对于像QT库等已经安装面向对象的方式创建了很多类、接口,如何快速理解这些类、接口?
答、参照这个类和接口所模仿的现实世界的对象和方法,通过现实世界已有的,来理解这些类和接口。
其次,如果是类、对象,则这些类、对象就是与现实世界相对应的对象的信息。
844、问QT有没有除去字符串空格的函数?
答、有。
845、两个字节的数据能不能造成文本中有空格现象?
答、能。
846、问
ASSERT: "uint(i) < uint(size())" in file D:/QTinstall/5.8/mingw53_32/include/QtCore/qbytearray.h, line 476
Debugging has finished
在QT中是什么错误?
答、用下标访问容器数据时,容器数据访问越界,例如QByteArray a;
a.size(3);
a.at(4);//此处会报错。
847、问QByteArray中用remove(i,1),删除指定下标字符后,i下标字符是什么?insert(i,"@")函数是在下标i处前插还是后插?
答、全部往左移(由remove内功能实现),注意删除以后容器size()是改变的。前插。
848、问文本文件中两个字符之间的空白空间都是由空格符造成的吗?
答、不是,是由\r、\t、space字符造成。
849、qDebug()如何打印不同进制的信息?
答、首先在头文件中包含#include <QDebug>


在需要使用的地方插入:


         qDebug("intensity:%d",intensity[0][2]); (%d表示整数)


输出结果:


intensity:195


 
注:
%a,%A 读入一个浮点值(仅C99有效)    
%c 读入一个字符    
%d 读入十进制整数    
%i 读入十进制,八进制,十六进制整数    
%o 读入八进制整数    
%x,%X 读入十六进制整数   
%s 读入一个字符串,遇空格、制表符或换行符结束。    
%f,%F,%e,%E,%g,%G 用来输入实数,可以用小数形式或指数形式输入。    
%p 读入一个指针    
%u 读入一个无符号十进制整数   
%n 至此已读入值的等价字符数    
%[] 扫描字符集合    
%% 读%符号
850、Qt中qtimer文件中有一个可以使得停顿指定时间再执行函数的程序?
答、SingleShot
860、问qt程序存储的目录可以是中文吗?
答、不能。
861、问
D:\qt_code\CHESSDIYAGAIN\board.cpp:221: error: invalid use of incomplete type 'class QMouseEvent'
     QPoint p=ev->pos();//鑾峰緱榧犳爣鐐瑰嚮浣嶇疆鐨勫潗鏍
                ^
错误出现原因?
答、没有添加QMouseEvent作为头文件。
862、为了避免上次使用的画笔或画刷影响其它图形的绘制,应该采取什么方案?
答、每次绘制前都指定画刷和画笔。
863、问如何知道QString类型变量的某个字符?获得的字符又怎样转换成字符串呢?
答、QChar ch=text.at(index);
其中index是下标。
QString(ch);(创建匿名对象)
864、问
QString text="李蚊"
QChar ch=text.at(0);
这种写法对吗?能说明什么?
答、对,说明QChar在QT中已经是广义的字符类型了,是一个类。
865、问QT中按f4可以实现什么功能?
答、.h和相应的.cpp文件切换。
866、问UI界面的x、y坐标是怎么规定的?
答、横向为x、纵向为y.
867、问什么时候paintevent会被触发?
答、当外部窗口遮住程序窗口时,事件触发(触发两次);当窗口刚刚建立时被触发(触发一次)。
868、问resizeevent事件如何触发?
答、当手动使得窗口变大或变小时resizeevent事件就会触发,特别是第一次构件程序,出现窗口时,resizeevent事件也会触发。
869、问QApplication app(argc,argv);作用?
答、所有窗体程序,都必须要经过qapplication的协助才能进行初始化。而且widget窗体能正常工作也离不开qapplication;有一点可以体现,那就是app.exec()能够卡住程序,不让窗体只闪一下就退出。
870、问如何不设置画笔?
答、p.setPen(Qt::NoPen);
871、问如何在图形上绘制图片?
答、p.drawImage(QPointF(300,100),QImage("./1.png");
872、问如何设置文字字体?如何设置文字
答、p.setFont(QFont("宋体"),45,700,true);p.drawText(100,50,"妹子");
873、问设置矩型的方法?
答、p.drawRect(QRect(70,30,100,50);
874、如何旋转图形?
答、p.rotate(30);
875、如何设置图形的大小?
答、p.scale(0.5f,0.5f);
876、如何设置图形平移的效果?
答、通过设置画笔对象p内的属性p.translate(100,100);
877、如何绘制一条直线?
答、p.drawLine(QPoint(0,0),QPoint(100,100));
878、如何为画笔设置画刷特性?
答、p.setBrush(QBrush(Qt::green));
使用p绘图时,封闭图形内会变成绿色。
879、如何绘制虚线?
答、首先创建虚线画笔,QPen pen(Qt::red,5,Qt::DashDotLine);p.setPen(pen);再用画笔p绘制图形。
880、问什么是图形的反锯齿特性?给出营造该效果的程序?
答、反锯齿特性就是图形外边框呈现精致型效果的特性。p.setRenderHint(QPainter::Antialiasing.
881、给出绘制椭圆形图形的方法?
答、p.drawELLipse(QPoint(200,200),100,50);
其中(200,200)是图形的中心;
882、如何保证所绘制的图形再本程序的显示框中?
答、QPainter p;
p.begin(this);
883、定义用来绘制各种图形的对象的程序?
答、QPainter p;
884、问画笔的作用?画刷的作用?
答、画笔影响开放性的图形和封闭性图形边缘;画刷影响封闭图形的内部。
885、问怎样在widget上绘制文字(改变字体)、圆、矩型、填充封闭图形、线、改变图形大小、
886、问QFont中第三个参数weight(int 类型)的含义?第二个参数height(int 类型)的含义?
答、字的笔画宽度、字的高度。
887、问如果在函数中申请空间用来定义标签和按钮,需要注意什么?
答、一定要加上show();不然不会出现。因为主窗口当初show的时候没有带上它。
888、问函数有没有类型?
答、没有
889、哨兵能够防止,程序的内存跨界?
答、对。
890、\0是字符串的哨兵?
答、对。
891、qt中widget有没有工具栏、标题拦功能?
答、没有。
892、notify函数能被重载吗?
答、可以,通过继承qapplication父类。 
893、问QT中的所有事件都是通过什么机制发出的?
答、application中的notify()函数发出。
894、问QT中的event函数的作用?
答、可以处理自定义消息;截取消息,但是只能截取这个对象的消息。
895、问QT内设的event中modifier()函数用于什么事件?isAUtoRepeat()函数适用于什么事件?
答、键盘事件返回ctrl+k(其中k是按键)、isAUtooReapt()返回的是重复的按键ASCII值
896、问QT中如果标识符是倾斜的,是什么类型函数?
答、虚函数。
897、问QString类型变量内字符串的数据存放在哪个空间?
答、堆空间。要考虑深拷贝和浅拷贝问题。
898、问QByteArray buf(1024,0)
 buf+="abc";
buf="abc";
有没有改变buf的size()值?如何使用才能很好避免这种麻烦,让buf真正成为一个具有1024字节的缓冲区
答、改变了。通过char*p=buf.data()的方式


899、问QByteArray buf(1024,0)相当于c语言的什么类型程序?
答、char*p=malloc(1024);
memset(p,0,1024);
900、怎样将一个整数转换成8进制数的字符串?
答、str=QString::number(9,8);
901、问字符串转数字、数字转字符串在QT中的方式是什么?
答、str=QString::number(123)(静态函数,没有this指针,可以用作用域直接调用);//数字转字符
或str=QString().sprintf("%d",9);
或str.sprintf("%d",109);
或str=QString("val %1,%2").arg(100).arg("helloworld");
str.toInt();//字符转数字
902、写文件时不能用QString,只能用QByteArray?
答、对。
903、问split函数在容器QString中的作用,以及返回类型是什么?
答、对字符串进行切割,并返回切割后的部分。参数是语言字符组,
例如QList<QString>substrs=str.split("一个");如果str=“一个又一个又”;
qDebug()<<substrs会打印出(“又”,“又”);
904、QT中查找某个语言字符组的函数是什么?
答、str.indexof("一个");查找语言字符组"一个"在语言字符串str中的第一次出现位置
903、问QString有没有拼接字符串的功能?
答、可以,str+="一个".
904、问在QT中QList和QVector的增删改遍历的函数用法是相同的?
答、对。
903、问
QVector<int *>v;


.....
v.clear();
使用v.clear()后,如果容器原来存入的是堆空间,该堆空间会不会被释放?
答、不会。
902、问
 v[0]=100;
使用下标替换容器中的值要注意什么?
答、必须保证下标引用的空间是合法的。
903、如果编程过程中出现可能是编译系统造成的错误,使得正确的程序编译不出结果,怎么解决?
答、清理项目。再构建。
904、给出用QTextStream读写文件的案例?
答、
读文件:
QFile file("/proc/modules");  
if (!file.open(QIODevice::ReadOnly | QIODevice::Text))  
 return;  
QTextStream in(&file);  
QString line = in.readLine();  
while (!line.isNull()) 
{  
     process_line(line);  
     line = in.readLine();  
 }  
写文件:
QFile data("output.txt");
 if (data.open(QFile::WriteOnly | QFile::Truncate)) {
     QTextStream out(&data);
     out << "Result: " << qSetFieldWidth(10) << left << 3.14 << 2.7;
     // writes "Result: 3.14      2.7       "
 }


905、给qt读取文本文件的案例
答、
QFile file("/home/administrator/testdir/test.txt");    
    if(!file.open(QIODevice::ReadWrite | QIODevice::Text)) {    
        qDebug()<<"Can't open the file!"<<endl;    
    }    
    QTextStream stream(&file);    
    QString line_in;    
//    while( !stream.atEnd()){    
//        line_in = stream.readLine();    
//        qDebug() << line_in;    
//    }    
//    stream.seek(stream.pos());    
    stream.seek(file.size());//将当前读取文件指针移动到文件末尾    
    int count = 0;    
    while(count < 10){    
        stream << QObject::trUtf8("新建行:") <<++count<<"/n";    
    }    
    stream.seek(0);//将当前读取文件指针移动到文件开始    
    while( !stream.atEnd()){    
        line_in = stream.readLine();    
        qDebug() << line_in;    
906、问
 QGridLayout *mainLayout=new QGridLayout(this);//设置对象,划分空间
    QGridLayout *centerLayout=new QGridLayout;
    mainLayout->setRowStretch(0,1);
    mainLayout->setRowStretch(2,1);
    mainLayout->setColumnStretch(0,1);
    mainLayout->setColumnStretch(2,1);
    mainLayout->addLayout(centerLayout,1,1);
是什么含义?
答、setRowStretch和setColumnStretch都是设置行的比例,开始参数表示行号或列号,第二个参数是比例系数,如果相同,说明这些行的比例相同。无论拉伸多少,都有相同的长度。这样可以保证画布在中间。
907、在什么情况下,QByteArray比较常用?
答、存储纯二进制数据或8bit编码文本字符串;当内存资源很珍贵时。
908、在QT中怎样获得一个对象的首地址?
答、对象名.data();例如Person对象p1,首地址是p1.data();
909、问在QT的Qvector中有没有根据值删除一个元素的函数?
答、有,v.removeOne(3);但是如果是结构体必须重载==号
910、给出用QMessgaeBox类对象,弹出带图片的窗体信息,且文字的字体颜色改变?
答、QMessageBox message(QMessageBox::NoIcon,"Title","content with <font color='red'>icon</font>.");
    message.setIconPixmap(QPixmap("3.png"));
    message.exec();
911、给出用QMessageBox弹出提示信息框,根据选择的提示信息,执行相应的程序。
 答、方法一、QMessageBox::StandardButton rb = QMessageBox::question(NULL, "Show Qt", "Do you want to show Qt dialog?", QMessageBox::Yes | QMessageBox::No, QMessageBox::No);//最后一个参数是默认选择No标签
    if(rb == QMessageBox::Yes)
    {
           // QMessageBox::aboutQt(NULL, "About Qt");
        qDebug()<<"it works";
    }
方法二、
QMessageBox message(QMessageBox::NoIcon, "Show Qt", "Do you want to show Qt dialog?", QMessageBox::Yes | QMessageBox::No, NULL); 
if(message.exec() == QMessageBox::Yes) 

        QMessageBox::aboutQt(NULL, "About Qt"); 
}
方法三:
QMessageBox::StandardButton rb=QMessageBox::information(NULL, "Title", "Content", QMessageBox::Yes | QMessageBox::No, QMessageBox::Yes);
 if(rb == QMessageBox::Yes)
 {
        // QMessageBox::aboutQt(NULL, "About Qt");
     qDebug()<<"it works";
 }
912、问涉及到对结构体的信息的文件读写,应该采用文本格式还是二进制格式?
答、二进制格式,因为文本格式都是字符串,而二进制格式与结构体信息相同
913、 QFile file("Student.data");
    file.read(QFile::ReadOnly);
问第二句什么问题?
答、不应该是file.read(QFile::ReadOnly);
应该是file.open(QFile::ReadOnly);
914、<QVector>和<vector>在qt中都能用,问他们一样吗?
答、不一样。
913、问
 connect(button1,SIGNAL(clicked()),[=]()
    {
        QString name=edit1->text();
        QString age=edit2->text();
        QString score=edit3->text();
        qDebug() << name << age << score;


    }
               );
哪有问题?
答、connect(edit,&QLineEdit::cursorPositionChange,[](int oldCurSorpos,int new Cursoppos)
{
qDebug()<<oldCursorPOS<<NEWcORSORPOS;
}
);
lamda表达式使用格式与普通的使用方式不一样。
914、问
qDebug<< name << age << score;
哪有问题?
答、必须用qDebug();
915、问如何为控件设置批注提示?
答、setPlaceholderText;
916、问
 function<void()>func=[]{
        printf("hello labmba\n");
    };
这段代码如何解释?
答、函数func的类型是void()(形参是void,返回类型也是void);函数语句段是{
printf("hello labmab\n");
}




917、没有Qapplication能创建widget窗口吗?
答、不能。
918、如何设置QPushButton对象的文本信息?
答、button->setText("退出");
919、问 QObject::connect(&c1,SIGNAL(mysig4(QList<QString>)),&c2,SLOT(myslot4(QList<QString>)),Qt::QueuedConnection);
emit c1.mysig4(QList<QString>()<<"aaa"<<"bb");
有什么问题?
答、不能正常工作,因为必须要在connect之前使用qRegisterMetaType<QList<QString>>();进行处理。
920、问qlist是什么?
答、qt中的list容器。类比c++中list容器。
921、问编译系统问题会不会造成编写的代码编译不成功?
答、会,清理掉编译结果后再编译。
922、问控件间的距离通过setSpacing设置,能不能缩小窗口使距离小于这个距离,能不能放大呢?
答、不能缩小,但是能放大。
923、问弹簧长度固定,能不能再压缩弹簧?
答、不能。
922、问增加控件间的间距的函数是什么?由哪个对象调用?
答、setSpacing,QHBoxLayout。
923、问增加弹簧的函数代码?由哪个对象调用?
addStretch;QHBoxLayout对象调用。
924、问弹簧、控件间距是如何被知道作用于哪两个对象的?
答、由编写程序时的顺序指定。
925、问调整控件间间距、添加弹簧,要通过什么对象进行?
答、QHBoxLayout;
926、问如何为widget对象添加布局?
答、QHBoxLayout *hBoxLayout=new QHBoxLayout(this);
927、问如何为QLineEdit控件,添加标题?
答、setPlaceholderText;
928、qt中移动控件的函数?
答、move;
929、问捕获列表中[]用&时要注意什么?
答、必须注意外部被捕获的对象们的声明周期在调用lamda函数时任然是有效的。
930、
function<void()>global_func;


void func()
{
int a=10;
global_func=[&]()
{
a=100;
};
};




int main()
{
global_func=func;
global_func();


}

931、问int c=100;
function<int(int,int)>func1=[a,b,&c](int a,int b)multable
{
c=1000;
return c;


}
这种写法可以吗?
答、可以。
932、问如果lamada函数捕获列表中的参数和函数参数列表中的参数重名了怎么办?
答、按就近原则使用参数列表中的参数。
933、问lamada函数如何捕获外面所有参数?
答、[]捕获参数列表中添加=号。或[&](可以将外面的参数引用捕获到函数内。)
934、
int c=100;
function<int(int,int)>func1=[c](int a,int b)multable
{
c=1000;
return c;


}
问有什么作用?c换成引用呢?(测试不加multable在lamda函数外打印c的效果分为引用和multable四种)
答、只在函数内改变c;但是在函数外不会改变c;
935、int c=100;
function<int(int,int)>func1=[c](int a,int b)
{
c=1000;
return c;


}会报错吗;如果不加c呢?
答、都会报错,因为c在[]传入的是值。可以变c为&c,就能修改,且修改了外面的c
936、function<int()>func1=[](){return 1;};问返回类型->int不写可以吗?
答、可以。一般返回类型->type都不写,因为类型会自动推导。
937、
问lamda表达式
[]、()、->type {}各表示什么含义?
答、捕获列表[]、()参数列表、->返回类型、{}函数体


其中参数列表、返回类型、都可以省略。
例如 []()->int{};
返回整型的lamada表达式。
938、问这种lamada表达式有问题吗?
auto func=[]
{
printf("helo");
}();
答没有问题。


939、问这种lamda表达式有问题吗?
[]
{
printf("ello world\n");
}
答、
940、问lamda表达式本质?
答、匿名对象,匿名函数。
941、给出用lambda表达式编写connect函数的程序?
答、connect(edit,&QLineEdit::cursorPositionChanged,[](int oldCurSorpos,int new Cursoppos)
{
qDebug()<<oldCursorPOS<<NEWcORSORPOS;
}
);
942、Qt中有自定义的槽函数和信号函数?
答、对。
943、
给出connet函数各参数的解释
QObject::connect(QObject* sender, // 发送信号的对象
  const char* signal, // 信号函数
  QObject* recver, // 接收对象的对象
  const char* slot,// 接收对象的槽函数
Qt::connectype); //指定connect的类型,入autoconnect、queueedconnect等。


944、问信号和槽的三个保留字是什么?
答、signals、slots、emit;
945、问使用queuedconnect连接方式,需要做什么额外处理,才能connect成功?
答、在connect之前,使用qRegisterMetaType函数注册参数类型。
946、问槽函数参数是引用?能用queueedconnection吗?
答、不能。
947、槽函数 void myslg(int );定义对吗?
答、对。
948、给出自定义绑定实例?
答、信号和槽机制就是通过自定义绑定功能实现。
949、问断开连接的函数?
答、QObject::disconnect();或者在槽中使用if(...)return;
950、怎样在槽函数中查看发射定好的对象?
答、QObject *senderObject=sender);


951、QObject::connect(&c1,SIGNAL(mysig()),&c2,SIGNAL(mysig1()));;
问作用?
答、信号mysig(),会触发信号mysig1();
952、问一个信号能连接多个槽吗?多个信号可以连接一个槽吗?
答、可以,可以。而且当一个信号连接多个槽时,哪个槽先工作不一定。
953、问QObject::connect(&c1,&MyClass::signal,&c2,&myClass ::myslot);
用法的优缺点?
答、Qt5.0以上才有,效率高,参数不体现在连接中,代码灵活;缺点是不支持重载.


954、QObject::connect(&c1,SIGNAL(mysig()),&c2,SLOT(myslot()));


qDebug()<<"begin";
emit c1.mysig();
qDebug()<<"end";
connect此时的连接类型是什么?打印结果是怎样的(myslot()中会打印slot is called 10);如果连接类型变成queueconnectiong呢?
答、directconnect;
begin
slot is called  10
end;


begin
end
slot is called 10;
955、问connect(&s1,signal(sig()),&s2,slot(myslot()));signal和slot的用处?
答、将函数转化为char *类型。
956、问是先用connect连接信号和槽再发射信号,还是先发射信号,再用connect连接?
答、先连接,再发射。
957、不使用connect对信号和槽处理,调用信号函数和槽函数的方法是什么?
答、emit c1.mysig();


c2.myslot();
958、问slots:下的函数能私有吗?保护呢?默认的slots:下的函数(槽函数)的权限是什么?
答、可以。private;
959、没有加Q_OBJECT的类,能实现信号和槽功能吗?
答、不能。
960、emit是关键字吗?
答、不是是保留字。
961、问调用signals:下的信号函数,要用什么方法?
答、emit再加函数名。
962、signals:下的函数可以自己实现吗?可以重载声明吗?
答、不可以,可以。预编译时signals:下的函数会自动实现。
963、signals信号是公有的?
答、对。
964、什么是读写序列化?
答、例如结构体内有很多中数据,name、age、id;当文件要和结构体进行信息交换时,这种交换就称为读写序列化。需要借助qdatastream进行读写。
965、问游戏开发中x、y正坐标方向与数学相同?
答、对。
966、qwidget没有父对象,有标题拦;有父对象,没有标题拦。
答、是。
967、qt中properties属性,都有set函数和get函数相对应。
答、对。
968、问QCoreApplication中的instance函数的作用?
答、instance函数是静态函数,返回一个QCoreApplication对象。
969、给出qt中按行读取文本文件的程序?提供一种即可。
答、while(!file1.atEnd())
    {
        QByteArray line=file1.readLine();
        QString str(line);
        qDebug()<<str;
    }
970、为什么有时候子类对象不能调用父类的函数?
答、私有继承了父类的函数。
971、问QCoreApplication的父类是什么?
答、唯一父类QObject。
972、问QObject父类是什么?
答、什么也没有。
973、问将结构体信息写入文件和从文件中读出结构体信息,要通过什么机制?
答、QDataStream。例如
 //写信息
   QFile file4("stu.info");
   file4.open(QFile::WriteOnly);
   QDataStream dastr(&file4);
   dastr<<ss1.name<<ss1.age<<ss1.ID;
    file4.close();


   //读信息
    Student sp;
   QFile file5("stu.info");
   file5.open(QFile::ReadOnly);
   QDataStream dared(&file5);
   dared>>sp.name>>sp.age>>sp.ID;
   file5.close();
   qDebug()<<sp.name<<sp.age<<sp.ID;
974、问在本地读文件用什么类型的缓冲区;是QByteArray还是Qstring?
答、QByteArray。
975、问QString类的构造函数参数有char吗?
答、没有,但是有QChar。
976、问file的read函数的参数类型是什么?
答、char *或整型、或没有,返回类型可以是QByteArray。
937、问file的write函数的参数类型是什么?
答、char*(只处理一个字符)、QByteArray(处理字符串)。
938、问在QT中QChar 是什么?
答、一个类;
939、问char *类型如何转化为QString类型?
答、str=QString(QLatin1String(ch));
940、问QString类型变量如何转化为char *类型?
答、先将QString类型转换成string类型,再将string类型通过c_str函数转换成char *类型。
QString filename;
std::string str=filename.toStdString();
const char *ch=str.c_str();s
941、问QString s4=QString::fromLocal8Bit((char *)s3.data());其中s3的类型是QString。
的作用?
答、改变s3内字符的编码方式,并赋值给s4;
942、问
QString类型和QbyteArray类型的变量能用str.data()转换成char *类型?
答、不可以,data()返回类型是QChar类型。
943、问
QString s3(1024,0);该句含义是什么?
答、s3对象类型是QString,而且内部的字符空间是1024,且初始化为零。
944、问
 QString s1="中华中华";
    QFile file1("text1.txt");
    file1.open(QFile::WriteOnly);
    //file1.open("test1.txt");
   file1.write(s1.toLocal8Bit());
   file1.close();
第四句设定写入的编码方式是toLocal8Bit;问,当读text1.txt文件时,需要采用什么特殊处理方式?
答、转换成QString类型变量,并制定fromLocal8Bit的方式。
945、问在QT上怎样将一个string类型变量转换成QString类型?
答、用QString::fromStdString(s3)函数。
946、问string类型的变量定义时要注意什么?
答、必须加上std::或using namespace std;且要有头文件。
947、问写文件
 QString s1="中华中华";
    QFile file1("text1.txt");
    file1.open(QFile::WriteOnly);
    //file1.open("test1.txt");
   file1.write(s1.toLocal8Bit());
那么读文件要采用什么方式?
答、QString strRead=QString::fromLocal8Bit(s2);
注意文件如果是UTF8编码,要用
948、问qdebug()<<能不能接收string类型的变量?
答、不能。只能接QString或char *;
949、给出将字符数组变成字符串输出的代码?
答、qDebug()<<ba.toStdString().data();
950、问map迭代器是值还是指针?list呢?
答、值,指针。
951、Qt的程序所在的路径,能有任何中文吗?
答、不能。
952、Qt的消息机制必须要在exec()运行中吗?
答、对。
953、问QCoreApplication app(arg,argv);
app是单例对象吗?
答、是。
954、问
QByteArray buf(1024,0);
QByteArray buf1;
buf1=buf;
问效率怎么样?
答、效率不低,但在C++中效率比较低。在Qt中是共用了内存。
955、QRegion有什么作用?
答、绘制不规则图形。
956、问qint8是设么?qt中整型分qint8、qint32、等有什么好处,为什么不用int?
答、8字节整型(signed byte),提高程序的移植性。因为int在不同机器上可以是16位也可以有64位。
957、介绍缓冲区攻击的方式?
答、病毒注入到程序,程序函数调用通过压栈的方式,函数调用完成,栈指针会发生回退,如果回退适当,指针会跳到病毒程序开始执行的地方,覆盖了本来应该回退的正常程序的位置。
958、问什么是“哨兵”?
答、例如字符串的\0
959、信号和槽的使用的好处?
答、实现了通信的解耦。
960、给出用内存当成文件使用的方式实例?
答、QBuffer bufFile;
bufFile.open(QIODevice::WriteOnly);


bufFile.write("hello");


bufFile.close();


QByteArray bufData=bufFile.buffer();
qDebug()<<bufData;
961、要将内存当成文件使用,头文件是什么?有什么好处?
答、QBuffer.网络通信时,直接将内存中的数据发送给别人。这样可以提高信息传输效率
962、问QDataStream工具用到了什么技术?
答、管道。
963、QFile类是QIODevice的子类?
答、对。
964、struct Student
{
QString name;
int age;
int score;
};
问能够通过
file.write((char *)&tom,sizeof(tom));吗?应该采用什么方式写文件?如何读?
答、不能,因为QString 定义的变量,字符串存储在堆空间,只是将堆空间地址写入到文件。
可以采用序列化工具,(头文件QDataStream)
QDataStream ds(&file);
ds<<tom.age<<tome.name<<tome.score;


QDataStream ds1(&file);
ds1>>ds1.age>>ds1.name>>ds1.score;
这种方式可以序列化读文件。
965、给出qt中写文件的案例?
答、QString str="中国"
QFile file("text.txt");
file.open(QFile::writeonly);


file.write(str.toLocal8Bit());
file.close();
966、问QString、QByteArray、QPoint、QLine、QRect是不是QObject派生的类?
答、不是。所以没有信号和槽功能。
967、QByteArray定义的变量本质?
答、一连串的字符空间。
968、QByteArray buf(1024,0);
char *data=buf.data();
问data存储的是什么?
qDebug()<<buf;打印什么
答、部分变量内堆空间的首地址。QByteArray不会按字符串打印,而是全部打印1024个字符。
969、QByteArray buf(1024,0);
问buf内的存储空间在哪?
答、buf变量在栈上,但是指向的存储空间在堆上。
970、问QByteArray定义的变量,编码格式是设么?
答、取决于源代码文档的编码,mingw的qtCreateor是Utf-8;例如
QByteArray ba;
ba=“中文”;
971、QString定义的字符串,会将连续的字符序列,用utf-8的方式解读出来(编码格式)?
答、对。
972、str.trimmed();
问函数的功能?
答、将str中开头和结尾所有\n,\r,\t,空格字符全部去掉。
973、linux上什么是绝对路径?
答、以/开始的路径都是绝对路径。str.startsWith("/usr"));str会存储/usr开头的所有路径。
974、问str=QString("value is %1,say %2").arg(1000).arg("hello world");
是什么含义?
答、value is 1000,say hello world.
975、问数字转化为字符串的函数?
答、str=QString::number(9);


str.sprintf("%d",109);


str.QString(9);
976、问字符串转数字函数?
答、toInt();
977、怎样将字符串转成自己平台计算机的编码?
答、tolocal8Bit;
978、给出字符串切割的实例?
str=“是一个字符,一个”;


QList<QString>substrs=str.split("一");
qDebug()<<substrs;
输出("个字符","个")(待验证)
979、问QString str="王宝强";QByteArray ba="王宝强"他们的size()分别是多少?
答、str.size()是3个字节;ba.size()是9个字节。实际上字节序都是相同的,只是分成段后存储的方式不一样。


980、问在程序内部定义存储字符串的变量,用什么类型的类?涉及到不同平台的传输呢?
答、QString;QByteArray。
981、问QByteArray是什么?
答、字节数组。
982、问Qmap容器插入数据程序是什么?修改数据程序是什么?删除数据?清除数据?遍历数据?
答、m.insert("tom",18);
m["ll"]=10;(即可插入也可修改);


修改可以用m["11"]++;
m["11+=2;


m.erase(m.find("top"));
m.remove("top");
m.clear();


foreach(QString key,m.keys())
{
qDebug()<<key<<m[key];
}


for(auto it=m.begin();it!=m.end();it++)
{
it.key();
it.value();
}
983、问在qt中vector和list,成员函数相同?
答、对。
984、问vector容器修改元素的方法?
答、v.replace(0,100);
v[0]=100;
985、问vector容器删除元素的方法?
答、v.erase(v.begin());
v.remove(1,2);
986、问foreach(int d,v)
{
qDebug()<<d;
}功能?
答、打印出vector容器的数据。
987、问QVector、QList、QMap也继承与QObject吗?
答、不是。
988、问QCoreapplication适用于什么场合?QApplication使用于什么场合?
答、后台服务器,没有界面的程序。QApplication适用于有界面的程序,例如客户端程序。
989、问什么样的类有信号和槽的功能?
答、继承了QObject类的类。
990、信号和槽的作用?
答、可以使类相互独立,但是又能为两个类建立联系。
991、问选中某个函数声明的标识符,再按下alt+回车,有什么功能?
答、可以自动创建函数定义。(当然可以指定cpp文件)
992、Qt中所有内建的类都继承了qobject类?
答、是。
993、如何理解qt中的父对象和子对象?请给出实例,并模拟利用父对象释放子对象
答、QObject *obj1=new QObject;
QObject *obj2=new QObject;


obj2->setParent(obj1);
delete obj1;
父对象删除,会自动释放子对象;
当然也可以自己释放子对象。
994、问qt打印调试信息的方式是什么?
答、头文件QDebug、用法
qDebug()<<"helloworld";
qDebug("hellooworld",10);
qDebug()是一个函数,不是一个匿名对象。
上面两个是重载,第一个函数返回对象,第二个不返回。
类似函数qWarning()<<"this is";//警告消息
qWarning("aaa");


qCritical()<<"this is a critical!";//严重错误信息
它们头文件都是qdebug。
995、问学习qt最核心的原则是什么?
答、理解qt框架的消息路程机制。
996、问qt中能定义太多对象在全局(main函数外)吗?例如
Qwidget wi;
int main(int arc,char *agv[])
{

};
不能,在main函数中构建了qt应用程序的环境,wi在环境外创建(构造函数在函数外调用),所以不能定义太多全局对象。
997、问app.exec()的伪代码是什么?
答、while(1)
{
getmessage();//等待用户信息
dealmessage();
quitmessget();
}
998、问怎样使得循环程序不占用cpu?
答、while(1)
{
getchar();
}
999、qt中main函数必须带参数?
答、是。
1000、qt的类名一般和头文件相同?java也是?
答、对。对。
1、问QT最大的特点是什么?
答、将GNU开发工具移植到Win32。
2、QT编译时的中间文件会被删除吗?
答、有些会被保留。
3、富文本格式是什么?
答、微软公司开发的跨平台文档格式。文档里面可以让字体有颜色、图片、表格,例如word文档。
4、什么是语法高亮?
答、编写代码的时候关键字会显示不同的颜色。
5、问qt程序中有代码
ui->setupUi(this);


    tcpSocket=new QTcpSocket(this);
    isStart=false;




    connect(tcpSocket,&QTcpSocket::readyRead,
            [=]()
            {
                QByteArray buf=tcpSocket->readAll();
               if(true==isStart)
               {
                   isStart=false;


                  // QString str="hello##1024";
                 //  str.section("##",0,0);
                   fileName=QString(buf).section("##",0,0);
                   fileSize=QString(buf).section("##",1,1).toInt();
                   recvSize=0;


                   file.setFileName(fileName);


                   bool isOk=file.open(QIODevice::WriteOnly);
                   if(false==isOk)
                   {
                       qDebug()<<"WriteOnly error 40";
                   }


               }
               else
               {
                   qint64 len=file.write(buf);
                   recvSize+=len;
                   if(recvSize==fileSize)
                   {
                       file.close();
                       QMessageBox::information(this,"完成","文件接收完成");
                        tcpSocket->disconnectFromHost();
                        tcpSocket->close();


                   }
               }


             }
            );
如果顺序执行,会报错;QFile::setFileName: File (??2AC) is already opened
WriteOnly error 40
是什么原因?
答、isStart是变量,开始值为false,所以当 QByteArray buf=tcpSocket->readAll();执行时,无法进入后续if语句,造成程序执行卡住。
6、问后端是什么?前端是什么?
答、后端是处理传输文件的部分,前端是显示控制数据库的部分。
7、问Qt中的mainwindows和widget有什么区别?
答、ui界面有区别,mainwindows会有menuBar。
8、问如何查看变量名的定义?
答、ctrl+鼠标左键。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值