在QT的应用中,不可避免需要使用QtDesigner,创建的ui如何调用呢,这里给出我的调用方法。
所有设计做完后,保存ui文件,终端输入:
uic -o ui.h ui.ui
得到ui.h文件,新建mainwindow.h文件,输入:
#ifndef __MAINWINDOW_H__
#define __MAINWINDOW_H__
#pragma once
#include
#include
#include
class MainWindow : public QMainWindow,
public Ui::MainWindow_ui
{
Q_OBJECT
public:
MainWindow(QMainWindow *parent = 0);
~MainWindow();
};
#endif // end of __MAINWINDOW_H__
新建mainwindow.cpp文件,输入:
#include "mainwindow.h"
#include "map.h"
MainWindow::MainWindow(QMainWindow*parent)
: QMainWindow(parent),
ui(new Ui::MainWindow_ui)
{
ui->setupUi(this);
}
MainWindow::~MainWindow()
{
delete ui;
}
新建main.cpp文件,输入:
#include
#include
#include
#include "mainwindow.h"
int main(int argc,char *argv[])
{
QApplication app(argc,argv);
MainWindow win;
win.setWindowTitle("CAR-MAP SYSTEM");
//win.resize(2000,1600);//设置窗口大小
win.show();
app.installEventFilter(&win);
app.exec();
return 0;
}
编译即可,编译需要编写pro文件。
除此之外,我们经常会用到槽函数(SLOT)和信号(SINGNAL),但如果之定义了主控件,是无法自定义子控件的槽函数和信号的,解决这一点的办法就是提升控件。打开QTDesinger,选择需要提升的控件,选择提升并填写提升后的名字
所有设计做完后,保存ui文件,终端输入:
uic -o ui.h ui.ui
生成头文件后发现ui.h中引用了提升的控件的头函数,like this:
此时,我们需要自己编写相应的.h和.cpp文件,以此为例,新建mapwidget.h,输入:
#ifndef MAPWEIDGIT_H
#define MAPWEIDGIT_H
#include
#include
class MapWidget : public QWidget
{
Q_OBJECT
protected:
void paintEvent(QPaintEvent *event);
//void keyPressEvent(QKeyEvent *event);
public:
MapWidget(QWidget *parent = 0);
public slots:
void draw_map();
void draw_car();
void start_move();
void stop_move();
private:
QImage *m_img;
};
#endif
其中,void draw_map();void draw_car(); void start_move();void stop_move();是我自定义的头文件。
新建mapwidget.cpp文件,输入:
#include "mapwidget.h"
#include
#include "mainwindow.h"
#include "map.h"
MapWidget::MapWidget(QWidget *parent)
:QWidget(parent)
{
int imgW = 2000, imgH = 1600;
m_img = new QImage(imgW, imgH, QImage::Format_RGB888);
m_img->fill(QColor(0xff, 0xff, 0xff));
setBackgroundRole(QPalette::Base);
setAutoFillBackground(true);
setFocus();
}
void MapWidget::paintEvent(QPaintEvent * )
{
QPainter painter(this);
// 画在m_img上
painter.drawImage(QPoint(0, 0), *m_img);
}
void MapWidget::draw_map()
{
//编写槽函数
}
pro文件如下:
TEMPLATE = app
CONFIG += qt
QT += gui widgets core
TARGET = sutdy_1
SOURCES += \
./map.cpp\
./mainwindow.cpp \
./camerawidget.cpp\
./mapwidget.cpp\
./main.cpp
HEADERS += \
./map.h\
./camerawidget.h\
./mapwidget.h\
./ui2.h\
./mainwindow.h
最终效果如下:
参考文章
发表评论