Chinaunix首页 | 论坛 | 博客

apt

  • 博客访问: 391806
  • 博文数量: 121
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 600
  • 用 户 组: 普通用户
  • 注册时间: 2015-04-10 15:52
文章分类

全部博文(121)

文章存档

2017年(2)

2016年(23)

2015年(96)

我的朋友

分类: C/C++

2015-07-30 13:04:17

转载:http://blog.csdn.net/cgzhello1/article/details/7784462
好久没搞Qt,今天遇到了点小问题,几步搞定,现在记忆不是很好,在这里记下来,作为以后查阅资料。


我在修改UI界面的名字,build程序的时候,总是有这样的错误:



 

出错的最大可能:ui文件中并没有提及Widget这个类名!

解决方法:在ui中将这个uiwidget或者dialog或者mainwindow的名字修改为错误里提及的“struct Ui::Widget”中的Widget。总之,要保持ui文件中class项的值与uiwidgetdialogmainwindowObjectName相同

 

以下是涉及的各个文件:

1. gui.pro

#-------------------------------------------------

#

# Project created by QtCreator 2011-08-08T17:15:24

#

#-------------------------------------------------

 

QT       += core gui

 

TARGET = gui

TEMPLATE = app

 

 

SOURCES += main.cpp\

        widget.cpp

 

HEADERS  += widget.h

 

FORMS    += widget.ui

 

2. widget.h

#ifndef WIDGET_H

#define WIDGET_H

 

#include <QWidget>

 

namespace Ui {

    class Widget;

}

 

class Widget : public QWidget

{

    Q_OBJECT

 

public:

    explicit Widget(QWidget *parent = 0);

    ~Widget();

 

private:

    Ui::Widget *ui;

};

 

#endif // WIDGET_H

 

3. widget.cpp

#include "ui_widget.h"

#include "widget.h"

 

 

Widget::Widget(QWidget *parent) :

    QWidget(parent),

    ui(new Ui::Widget)

{

    ui->setupUi(this);

}

 

Widget::~Widget()

{

    delete ui;

}

 

4. main.cpp

#include <QtGui/QApplication>

 

#include "widget.h"

 

int main(int argc, char *argv[])

{

    QApplication a(argc, argv);

    Widget w;

    w.show();

 

    return a.exec();

}

 

我找了很久,都不知道问题在哪儿。曾尝试着把Ui namespace去掉,但重新查阅了C++namespace的用途,发现跟这个invalid use的错误并无关系。曾有网上的帖子说是一个Qtbug,应该将Widget类名的W变为小写,这个方法依然失效。经历了好多次的折腾,依然无果。

 

今天,我从 lang="zh-CN" style="font-family:SimSun;"> 网页上得到了启发,主要是这句话:“ I forgot the UI file in the transition from a QMainWindow class to a QWidget class.”我在XML Editor中查阅了我的widget.ui文件,发现我的ui文件是这样的:



 

我看到class标签的值是GoToCellDialog,而整个XML文件中并没有显著的地方提及Widget这个类名。我在Qt Designer中,将整个widgetobjectName修改成为Widget,然后编译,成功!

此时,widget.ui文件的前几行内容如下:




阅读(997) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~