再用QT编写程序的时候,出现了错误2027:使用了未定义类型Ui:Widget,该怎么解决?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了再用QT编写程序的时候,出现了错误2027:使用了未定义类型Ui:Widget,该怎么解决?相关的知识,希望对你有一定的参考价值。

1、如果确定电脑没有病毒,检查清理电脑是否存在恶意插件,把它清理掉。
2、如果使用windows IE浏览器出现该问题,尤其是打了错误补丁,用360安全卫士、安装的急救箱或其它软件进行系统修复,如果没有效果,升级或降低IE版本试试。
3、如果还是不行,最简单的解决办法就是:下载更换其它浏览器。
4、如果上面说的检查都没问题,可以试试下面的方法:
◆开始→运行→输入cmd→回车,在命令提示符下输入下面命令
for %1 in (%windir%\system32\*.dll) do regsvr32.exe /s %1回车。
完成后,在输入下面的
for %i in (%windir%\system32\*.ocx) do regsvr32.exe /s %i 回车。
直到屏幕滚动停止为止,重启电脑。
●检查运行regedit进入注册表, 在HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\ShellExecuteHooks 下,只有一个正常的键值AEB6717E-7E19-11d0-97EE-00C04FD91972, 将其他的删除。
参考技术A operator Apple() const return Apple(weight);
这一句,有问题,如果是把系统预定义类型转换为类类型的话,用类的构造函数就行了,这里就是啊
如果你是要把类类型转换为系统预定义类型就用这种类型
但语句只能是operator int(),operator float()等系统类型啊
哦,不好意思,弄错了,你这是两个类之间的转换:应该改为如下:
#ifndef H27_H
#define H27_H
#include<iostream>
using std::cin;
using std::cout;
class Apple;
class Orange
private:
int weight;
public:
int getorange()return weight;
Orange(int ii):weight(ii)
operator Apple() ;
;
class Apple
private :
int weight;
public :
Apple(int ii):weight(ii)
explicit Apple(Orange&org):weight(org.getorange())
int getapp()return weight;
;
Orange::operator Apple() return Apple(weight);
void test_convert(Apple a)
cout<<a.getapp()<<'\n';

#endif
//main.cpp
#include"h27.h"
int main()
Apple app(58);
test_convert(app);
Orange orange(68);
test_convert(orange);
test_convert(48);
return 0;
参考技术B 这种情况你用qtcreater打开ui文件,查看你的ui名字是否叫widget

关于编写Windows程序中启动兼容性问题

之前用qt4编写Windows程序的时候遇到了一个软件在系统的兼容性问题:用户在win10系统下使用这个程序的时候,如果没有用低于win10版本的兼容模式运行的时候,存在运行某部分功能的时候无法使用的问题。

这个问题一开始困扰了我很久,那时我认为的解决方案有两种:

1.将软件从qt4迁移到qt5上

不过在对软件的大小是有限制的,之所以一开始用qt4写这个项目是因为qt4的模块相对于qt5来说小很多,因此这个方案被我否决了

2.程序自启动的时候将系统兼容性设置为win10以下的版本类型

 

在否决了第一个方案之后,只能采取第二种方案。

windows程序的兼容性是由注册表控制的,其位置Software\\Microsoft\\Windows NT\\CurrentVersion\\AppCompatFlags\\Layers

以qt4中将程序设置为win7兼容模式为例子(需要重启才能生效,因为是程序启动后注册表信息才被修改的,读者可自行判断所处系统再进行相应的修改):

HKEY hKey;
    LPCTSTR strSubKey = L"Software\\Microsoft\\Windows NT\\CurrentVersion\\AppCompatFlags\\Layers";
    long lRet = ::RegOpenKeyEx( HKEY_CURRENT_USER, strSubKey, 0, KEY_WRITE, &hKey );
    if ( lRet == ERROR_SUCCESS )
    

        const size_t cSize = strlen(QCoreApplication::applicationFilePath().replace("/","\\").toStdString().c_str())+1;
        wchar_t* wc = new wchar_t[cSize];
        MultiByteToWideChar(CP_ACP, 0, QCoreApplication::applicationFilePath().replace("/","\\").toStdString().c_str(),
                            strlen(QCoreApplication::applicationFilePath().replace("/","\\").toStdString().c_str()) + 1, wc, sizeof(wchar_t)* cSize/ sizeof(wc[0]));

        //QCoreApplication::applicationFilePath().replace("/","\\").toLocal8Bit().data();
        lRet  = ::RegSetValueEx( hKey,wc, NULL, REG_SZ, (LPBYTE)(L"~ WIN7RTM"),18);  //WIN7RTM可以更换成你想要的兼容的类型
        RegCloseKey( hKey );
    

在对注册表信息修改之后,程序本身的兼容性问题并没有得到解决,还得进行重启后才生效,之后再加入重启程序的函数即可。

重启之前必须进行对是否已经在注册表中写入兼容信息进行判断,若已经兼容,那么注册表信息就不必再注册并且重启软件了。

值得注意的是,注册表是通过写入程序的相对位置来判断是否要用兼容性打开那个文件,因此,若程序之前已经兼容性运行过了,如果程序的位置再发生改变之后,再启动的话话并不会以兼容模式运行这个程序,此时又得在注册表中重新写入兼容性信息并且删除之前的兼容性信息后重启程序。

 

以上是关于再用QT编写程序的时候,出现了错误2027:使用了未定义类型Ui:Widget,该怎么解决?的主要内容,如果未能解决你的问题,请参考以下文章

Linux Mint (应用软件:QT 5.X编译错误)

ubuntu qt 生成可执行文件 在哪

错误 C2027:使用未定义类型 - 如何声明类

MySQL:错误 2027 (HY000):格式错误的数据包

关于编写Windows程序中启动兼容性问题

QT 集成到eclipse上之后建立QT console project运行出现Errors ( 2 items) make :***[debug] 错误 make[1