在QT的應(yīng)用中,不可避免需要使用QtDesigner,創(chuàng)建的ui如何調(diào)用呢,這里給出我的調(diào)用方法。
?所有設(shè)計做完后,保存ui文件,終端輸入:
uic -o ui.h ui.ui
得到ui.h文件,新建mainwindow.h文件,輸入:
#ifndef __MAINWINDOW_H__
#define __MAINWINDOW_H__
#pragma once
#include <QtGui>
#include<QObject>
#include <QMainWindow>
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 <QApplication>
#include <QtGui>
#include<QObject>
#include "mainwindow.h"
int main(int argc,char *argv[])
{
QApplication app(argc,argv);
MainWindow win;
win.setWindowTitle("CAR-MAP SYSTEM");
//win.resize(2000,1600);//設(shè)置窗口大小
win.show();
app.installEventFilter(&win);
app.exec();
return 0;
}
編譯即可,編譯需要編寫pro文件。
除此之外,我們經(jīng)常會用到槽函數(shù)(SLOT)和信號(SINGNAL),但如果之定義了主控件,是無法自定義子控件的槽函數(shù)和信號的,解決這一點的辦法就是提升控件。打開QTDesinger,選擇需要提升的控件,選擇提升并填寫提升后的名字
?
?所有設(shè)計做完后,保存ui文件,終端輸入:
uic -o ui.h ui.ui
生成頭文件后發(fā)現(xiàn)ui.h中引用了提升的控件的頭函數(shù),like this:
?此時,我們需要自己編寫相應(yīng)的.h和.cpp文件,以此為例,新建mapwidget.h,輸入:
#ifndef MAPWEIDGIT_H
#define MAPWEIDGIT_H
#include <QWidget>
#include <QObject>
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<QWidget>
#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()
{
//編寫槽函數(shù)
}
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
最終效果如下:
?文章來源:http://www.zghlxwxcb.cn/news/detail-664145.html
?文章來源地址http://www.zghlxwxcb.cn/news/detail-664145.html
到了這里,關(guān)于QT界面調(diào)用ui,定義主MainWindow中的子控件的槽函數(shù)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!