QT界面调用ui,定义主MainWindow中的子控件的槽函数

在QT的应用中,不可避免需要使用QtDesigner,创建的ui如何调用呢,这里给出我的调用方法。

 所有设计做完后,保存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);//设置窗口大小
    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 <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()
{
    //编写槽函数
}

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 


最终效果如下:

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值