1:qt中信号和槽有一种自动连接方式
void on_<widget name>_<signal name>(<signal parameters>);
如果槽的命名是这样的话:void on_<widget name>_<signal name>(<signal parameters>);
就会自动将widget name中的信号signal name和这个槽void on_<widget name>_<signal name>(<signal parameters>)链接起来。
例如:void on_okButton_clicked();系统就会自动将okButton类中的信号clicked和on_okButton_clicked这个槽函数连接。
当你触发okButton类的clicked时,这个槽函数就进行处理(注意这个button图标的object名字必须写成okButton,不是button图标显示的名字).
2: main_widget=new mainWidget(this)
main_widget=new mainWidget()
这两种申请方式的区别。
例如:
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
main_widget=new mainWidget(this);
main_widget->hide();
connect(this,SIGNAL(goToWidget(int)),this,SLOT(runningWidget(int)));
connect(ui->pushButton,SIGNAL(clicked()),this,SLOT(on_mainPage_clicked()));
connect(main_widget->ui->pushButton,SIGNAL(clicked()),this,SLOT(on_mainwindow_clicked()));
}
(1)main_widget=new mainWidget(this)申请表明你通过构造函数传递参数,你所用的对象就是你传递过来的对象,在他的基础上,添加main_widget所有的功能。
比如我已经在MainWindow-》setui构造函数中已经丰富了widget的窗口,如果我以这种方式申请,我就是在MainWindow-》setui-》widget的窗口的基础上,加我main_widget所定义的窗口成员。
(2)main_widget=new mainWidget()申请表明你会申请一个新的对象类,可能和你的this(MainWindow)有共同的继承类,但是它是在新对象上进行的操作,你的mainWidget是在你的新的对象类下添加它有的功能。
如果以new mainWidget()方式,我就不是在MainWindow-》setui-》widget的窗口的基础上,而是重新生成一个widget,在我生成的空白的widget之下,添加我main_widget所定义的窗口成员。
3: ui->setupUi(this);
main_widget=new mainWidget(this);
MainWindow::setCentralWidget(main_widget);
main_widget->hide();
和
ui->setupUi(this);
main_widget=new
mainWidget( );
MainWindow::setCentralWidget(main_widget);
main_widget->hide();
效果一样,就是重新设置了CentralWidget,把ui->setupUi中已经设置的CentralWidget,覆盖掉了。
ui->setupUi(this);
main_widget=new
mainWidget(this);
main_widget->hide();
这种方式,使得把ui->setupUi(this)中设置的CentralWidget和通过构造main_widget类,把两个定义的widget窗口,都设为MainWindow中的CentralWidget。所以看到的效果是两个widget的重叠。如果这次想看到之中一个可以 main_widget->hide()另一个,同样想看到另一个可以show这个,hide另外一个
4:c++中一般对于有的函数参数在声明的时候,就给出默认值,这样,你可以在传实参的时候,可以不给这个参数传实参,它默认的就是你的默认值,也就不会出现编译错误。如果不是这样声明的话,就必须给函数传所有的实参,否则会提示编译问题。
5:信号和槽函数的定义,其函数参数一般要就一致(如果信号函数没有参数,一般要求相连的槽函数也不能有参数。如果信号函数是某个类型的,相连的槽函数也是相应类型的),否则编译时会提示接受者和发送者参数冲突。
例如 connect: Incompatible sender/receiver arguments
6:qt下写有关socket通讯方面程序,应包含#include <QtNetWork>
但是make时出现 error: QtNetwork: No such file or directory
具体操作步骤如下
(1): qmake -project
(2): 手工添加 QT += network
(3): qmake
(4): make
7: QTextCodec::setCodecForTr(QTextCodec::codecForName("UTF-8"));
一种提供输出中文的方式,但是可能提供的字库不同,给codecForName提供的名字不同(UTF-8,gb2312等等)
所以有时开发过程中,会出现输出中文乱码,或者是输出小框。大多都是提供的字库与你的输入法不符。