① Qt5编写Qt求学之路书上的例子 显示QLabel没有构造函数
你给补一个不就行了。
或者继承一个类,补个构造不就行了
② Qt源程序写在哪个目录下
应该是
MainWindow::MainWindow()
③ qt部件构造函数问题
QObject 提供了信号与槽、多语言、Qt垃圾回收等Qt核心机制。它是Qt中所有对象的基类。
QWidget,顾名思义,就是窗体部件的基类,比如QDialog、QLabel等都直接或间接继承自它。它提供了一些窗体部件专有的信号与槽。QtWidget自然也继承自QObject。
一般上,在使用Qt
Creator创建一个类时,Qt会询问你该类的基类是什么、类型信息是什么等。如果你的类是继承自形如QPushButton、QDialog、
QMainWindow、QLabel的,那么,使用explicit MyLabel(QWidget *parent =
0);。如果你的类继承自QString等类,那么使用explicit MyString(QObject*parent = 0);。
这里的QObject *parent也好,QWidget *parent也好,都是为了给对象指定从属关系。比如,
explicit MyLabel(QWidget *parent = 0);
这样:
QDialog dialog;
MyLabel *label = new MyLabel(&dialog);
就指定了label是作为dialog的一个child存在的。当dialog被销毁时,它的所有children都会被自动销毁。所以在Qt中,只要我们在动态创建对象时显式或隐式(比如通过Layout、setCentralWidget等)指定了对象的从属关系,那么这个对象就会在其父对象销毁的时刻被Qt自动销毁,而无需你自己再调用delete了。
④ QT 编程问题,帮我看看这段代码,为什么写在构造函数中不运行,用按钮点击才能运行,我想实现自动访问网络
点击铵钮时会通过信号槽机制执行到槽函数replyCuifei(QNetworkReply *reply)。直接写在构造函数中不会自动触发,你可以直接在构造函数中调用replyCuifei(QNetworkReply *reply)。
⑤ 请问一下我在Qt一应用程序中,在构造函数里面写的widget比如按钮这些,运行后都无法显示,只有一空白窗体
如果说你的按钮没有显示,最有可能的原因是你没有将按钮的父窗口设置成你自定义的Widget
比如说你自定义了一个 Widget,它继承自 QWidget,示意如下:
//widget.h
#ifndef WIDGET_H
#define WIDGET_H
#include <QtGui/QWidget>
#include <QPushButton>
class Widget : public QWidget
{
Q_OBJECT
public:
Widget(QWidget *parent = 0);
~Widget();
private:
QPushButton buttonA;
QPushButton buttonB;
QPushButton* pButton;
};
#endif // WIDGET_H
在上面的头文件中定义了两个button以及一个指针,下面是源文件
//widget.cpp
#include "widget.h"
Widget::Widget(QWidget *parent)
: QWidget(parent)
{
buttonA.setText("buttonA");
buttonB.setText("buttonB");
//在构造pButton时指定Widget为pButton的父窗口
//注意:由于pButton继承自QObject并且你为他指定了父窗口,
//父类中的QObjetc会对pButton的内存进行管理,并在合适的时候释放内存,
//所以你不需要在Widget的析构函数中去进行delete pButton的操作,
//建议使用new这种方式来构造子控件
pButton = new QPushButton(this);
pButton->setText("buttonC");
//指定Widget为buttonA和buttonB的父窗口
//如果你不指定他们的父窗口,那么这些控件将不可见
//你可以注释下两行中的某条语句,来测试控件是否可见
//目前两个控件都是可见的
buttonA.setParent(this);
buttonB.setParent(this);
//移动控件到相应的坐标点
buttonA.move(100,100);
buttonB.move(100,150);
pButton->move(100,200);
}
Widget::~Widget()
{
}
//main.cpp
#include <QtGui/QApplication>
#include "widget.h"
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
Widget w;
w.show();
return a.exec();
}
这就是整个示例程序了,总的来说,要想窗体中的控件可见,你必须将该窗体设置成这些控件的父窗口。
⑥ c++ Qt创建菜单栏代码QMenu写在类成员里面, 还是定义到方法里
是做成临时变量,还是做成类成员,主要还是看你后面还会不会用到这个变量。
通常情况下,尽量使用临时变量,因为临时变量超出了作用域后就会析构。
变量多了,会导致滥用。
如果后面还会用到(比如析构函数)这个变量,而且没有别的途径能够获得这个变量,那么就要做成类成员。
⑦ C++ Qt 编程求解惑 具体问题:与Qt框架无关的复杂计算函数,声明和实现分别写在哪个文件里
QT 的槽函数跟正常C++的函数是一样使用的,不过多了接受信号的功能而已,可以看作是C++函数的超集
C++函数怎么调用另一个.cpp文件里的函数或是参数那还是一样调用,include .cpp 进去然后直接使用
槽函数不是说一定要有信号才能被调用的,因为它可以算是正常C++函数的超集,所以跟正常C++函数一样能在任何你声明过它的地方的
ps:信号可以带参数传递给槽函数
⑧ 关于QT构造函数的问题
构造函数中的那个参数已经赋默认值了,传个参数进去,这个对象就成了MainWindow的父对象了。
父对象的用处很多的,Qt对象树之类的都要用到
⑨ Qt中构造函数初始化的问题
在void FindDialog::findClicked()中 定义的两个信号
45 if (backwardCheckBox->isChecked()) {
46 emit findPrevious(text, cs);
47 } else {
48 emit findNext(text, cs);
49 }
当用户点击find按钮后 调用这个函数 函数中获取lineEdit和caseCheckBox的状态 然后发送信号
41 QString text = lineEdit->text();
42 Qt::CaseSensitivity cs =
43 caseCheckBox->isChecked() ? Qt::CaseSensitive
44 : Qt::CaseInsensitive;
在别的程序中使用这个类时,可以通过关联这两个信号 知道这个窗口中lineEdit和caseCheckBox的状态