Cast
// 1. int to QString
int i = 1;
QString iString = QString::number(i);
// 2. QString to int
QString s = "1";
int i = s.toInt();
// 3. QJsonValue to QString
QString pubTopic = root["pub_topic"].toString();
Signal and Slots
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::MainWindow)
{
ui->setupUi(this);
connect(ui->horizontalSlider,SIGNAL(valueChanged(int)),ui->progressBar,SLOT(setValue(int)));
}
信号和槽的参数必须一致。
新窗口
用户必须关掉新窗口后才能回到父窗口
void MainWindow::on_actionNew_Window_triggered()
{
Dialog d;
// A modal dialog blocks input to other windows in the application until it is closed.
d.setModal(true);
// It executes the dialog in a blocking manner. It shows the dialog and waits for the user to close it before continuing the execution of the code that follows.
d.exec();
}
因此,以下的写法和上面的代码等效:
void MainWindow::on_actionNew_Window_triggered()
{
Dialog d;
d.setModal(false);
d.exec();
}
新窗口和父窗口可同时交互
首先在mainwindow.h
中引用:
#include <dialog.h>
private:
Ui::MainWindow *ui;
Dialog *d;
然后按钮的槽函数初始化窗口并使用show
:
void MainWindow::on_actionNew_Window_triggered()
{
d = new Dialog(this);
d->show();
}
水平布局和垂直布局
#include <QPushButton>
#include <QHBoxLayout>
#include <QVBoxLayout>
void MainWindow::on_actionNew_Window_triggered()
{
d = new Dialog(this);
d->setWindowTitle("Title!");
QPushButton *b1 = new QPushButton("1");
QPushButton *b2 = new QPushButton("2");
QPushButton *b3 = new QPushButton("3");
QHBoxLayout *hlay = new QHBoxLayout;
hlay->addWidget(b1);
hlay->addWidget(b2);
hlay->addWidget(b3);
d->setLayout(hlay);
d->show();
}
JSON I/O
// 文件读取
QFile file1(file1_path);
if(!file1.open(QIODevice::ReadOnly|QIODevice::Text))
{
return;
}
QByteArray data = file1.readAll();
file1.close();
// 将QByteArray转化为QJsonDocument
QJsonDocument jsonDoc = QJsonDocument::fromJson(data);
if (jsonDoc.isNull()||!jsonDoc.isObject())
{
return;
}