QT运用过程中官方文档时使用的次数比较多,但是切换到帮助中寻找函数用法油田麻烦,当鼠标光标在上面时,可以直接使用F1建之间打开帮助文档。但这过程中有一个问题就是当热键冲突时,比如我的电脑上F1是静音,此时可以使用Fn+F1打开即可。
Qmainwindow和Qdialog是QWidget的子类
#include "mainwindow.h"
#include <QApplication>//应用程序头文件
int main(int argc, char *argv[])
{
QApplication a(argc, argv);//只能有一个
MainWindow w;//窗口的对象
w.show();
return a.exec();//进入消息循环机制
}
快捷键:
整行移动:ctrl+shift+上/下
运行:ctrl+r
帮助文档:F1
自动对齐:ctrl+i
对应.cpp&&.h相互切换F4
signal:
signal必须是void 类型的,槽函数为了和signal保持一致,也必须是void类型的,自定义的信号可以通过emit(发射信号确定)
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QPushButton>
#include <QMainWindow>
#include <QLabel>
#include "subwidget.h"
namespace Ui {
class MainWindow;
}
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
explicit MainWindow(QWidget *parent = nullptr);
~MainWindow();
void call();
void dealSub();
signals:
void sendsignals();
private:
Ui::MainWindow *ui;
QPushButton wi;
Subwidget subwi;
};
#endif // MAINWINDOW_H
#include "mainwindow.h"
#include "ui_mainwindow.h"
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
wi.setParent(this);
wi.move(100,100);
wi.resize(50,50);
wi.setText("子窗口");
resize(500,500);
connect(&wi, &QPushButton::released, this, &MainWindow::call);
connect(&subwi, &Subwidget::sendsignal, this, &MainWindow::dealSub);
resize(500,500);
/*
信号发出者,指针类型
处理信号 &发送者的名字::信号名字
信号接收者, 指针类型
处理信号 &接收者的名字::槽函数
*/
/*
自定义槽,槽函数需要与信号保持一致,
由于信号没有返回值,所以槽函数没有返回值
*/
}
void MainWindow::dealSub()
{
subwi.hide();
this->show();
}
void MainWindow::call()
{
subwi.show();
hide();
}
MainWindow::~MainWindow()
{
delete ui;
}
#ifndef SUBWIDGET_H
#define SUBWIDGET_H
#include <QWidget>
#include <QPushButton>
class Subwidget : public QWidget
{
Q_OBJECT
public:
explicit Subwidget(QWidget *parent = nullptr);
QWidget subw;
void sendplot();
QPushButton subButton;
signals:
void sendsignal();
public slots:
};
#endif // SUBWIDGET_H
#include "subwidget.h"
Subwidget::Subwidget(QWidget *parent) : QWidget(parent)
{
subButton.setParent(this);
subButton.setText("主窗口");
connect(&subButton,&QPushButton::released,this,&Subwidget::sendplot);
resize(500,500);
}
void Subwidget::sendplot()
{
emit sendsignal();
}