作为一名一线开发工程师,我将自己用到的和看到的做一介绍,如果有不妥的地方,欢迎大家留言讨论。
1C/C++系列
IDE不用说,首选全宇宙最牛的IDEVS系列,该部分有代表性质的也就是MFC、Qt了,下面分别介绍。
11MFC
一个早已经被微软抛弃的产物,不过目前还占据着一定的市场,主要在军工、自动化等行业,如果你不幸入职一家还在维护这MFC老项目,那么建议你该考虑考虑下一份工作了,MFC==没饭吃,重要的事情说三遍,不建议选择MFC,不建议选择MFC,不建议选择MFC。
12Qt
当然IDE首推QTCreator,当然,你也可以选择VS搭载QT插件进行开发。跨平台支持,在国产化越来越受到重视的今天,相信Qt的市场也会逐步增大。
下面是一款使用QML绘制的界面效果图
13C++第三方界面库
这里就不一一列举了,可直接网上搜索,重点推荐一款duilib。
Duilib是一个Windows下免费开源的DirectUI界面库,由于简约易扩展的设计以及稳定高效的实现被各大互联网公司普遍接受,广泛应用于包括IM、视频客户端、股票行情软件、导航软件、手机辅助软件、安全软件等多个行业的众多pc客户端软件。Duilib还在不断的发展中,在文档、例子、动画、渲染引擎等多个方面将持续改进。除去各方面优点,其最不足之处就是原始代码作者已经不再维护,可能遇到的坑会比较多,各个公司也都是维护这自己的一个版本。
下面是基于Duilib开发的一款仿360安全卫士的界面效果。
2C#
程序界的富二代,有着微软这一亲爹的扶持,VisualStudio强力支持。通过简单的拖拽界面,即使你是一个新手,也可以快速做出一款有着可视化界面的GUI程序,当然想要做好、做深入了还是需要你花费一定的功夫来学习的。常见的管理系统使用它来开发的还是很多的。其优势就在于快速开发,很好的兼容瘟都死。
3JavaScript
有代表性的要数Electron了,不可一世的VSCode就是由其开发而来,JS大有一统天下的趋势(后台,PC端,移动端)。
4Java系列
这个,使用的应该不是很多了,作为了解即可,JavaSE。使用Eclipse开发即可。
常用的GUI开发工具有gtkmm,Glade,QtCreator。
gtkmm是官方的GTK的C接口,GTK是当前最流行的图形界面开发库之一。使用gtkmm,你不但可以从代码还可以用Glade来创建用户界面。不过需要libglademm的配合。gtkmm是自由软件,遵循LGPL(GNULibraryGeneralPublicLicense)。
Glade是GTK图形用户界面产生器。也就是说,Glade是个VisualProgrammingTool,和MicrosoftWindows平台的VisualTools类似,只要用鼠标拉一拉,它就会自动帮你产生Csourcecode。所以我们这些懒人,就不用再去为画面的设计烦恼,用Glade设计好画面,再用编辑器把程式码稍为修减就OK了。(现在也有各种语言如C、Ada95、Python、Perl等的GTK介面,如果搭配其它工具,也可以自动产生C,Ada95,PythonandPerl的程式码)。
QtCreator是跨平台的QtIDE,QtCreator是Qt被Nokia收购后推出的一款新的轻量级集成开发环境(IDE)。此IDE能够跨平台运行,支持的系统包括Linux(32位及64位)、MacOSX以及Windows。根据官方描述,QtCreator的设计目标是使开发人员能够利用Qt这个应用程序框架更加快速及轻易的完成开发任务。
GUI是指图形用户界面是指采用图形方式显示的计算机 *** 作用户界面。与早期计算机使用的命令行界面相比,图形界面对于用户来说在视觉上更易于接受。然而这界面若要通过在显示屏的特定位置,以”各种美观而不单调的视觉消息“提示用户”状态的改变“,势必得比简单的消息呈现花上更多的计算能力。
在pro文件里添加:QMAKE_CXXFLAGS += -m128bit-long-double如果是C工程或者有C文件也用那就也加上:QMAKE_CFLAGS += -m128bit-long-doublepro文件很灵活的,编译参数那块控制还有下面好多:
qtcreator如何在stylesheet中设置
项目建立完成后:
右键点你的项目 “Add New”->"QT Resource file" 生成一个qrc文件
然后双击它 点add 然后Add Prefix 再Add file 完事之后build一下
在你的ui上点右键 ->Change StyleSheet ->add Resource ->backgroud-image 顺着往下点就能看见你在qrc里添加的那张了
摘要:
QT Create中,对button或者window等部件设置背景、颜色、透明等样式时,需要用到style sheet,可以直接在代码里写,也可以在ui设计师里通过右键change style sheet的方法来设置,本人是使用的后面的方式,下面介绍几种常见的用法。
介绍:
作者使用的开发环境为:qt creator 201005, qt47。
1、利用style sheet给窗体设置背景
使用stylesheet设置背景还是有一些要注意的,如果是在mainwindow和dialog中,直接右键change style sheet在add resource中选择background-image或者border-image,选择资源文件中的就行了(前者是按像素显示,后者可根据窗体大小来自动缩放),如下图:
但在widget中就不行,你会发现,用同样的方法,背景并没有发生改变,而仅仅是它的子窗体背景发生了改变。
那么在widget中要如何做呢,我们在widget中放置一个frame,然后对frame通过stylesheet设置背景,后面窗体里所有的部件都放在这个frame里。
我们知道,子窗体会继承父窗体的属性,也就是说,父窗体的背景,在子窗体中也会有,那如何让子窗体不继承父窗体的背景呢,同样的,还是在Edit Style Sheet里,需下输入如下代码:
#desktop {
border-image: url(:/images/desktopjpg);
}
#desktop {
border-image:url();
}
desktop是你的窗体名。
2、menubar设置透明
我想做一个菜单按钮,像ubuntu的应用程序菜单一样,能在点击时d出一个下拉框,我选择了用mainwindow来实现,但我如现menuba显示在顶层很难看,如何才能不让它显示呢。
设置menuba的stylesheet,
background-color:transparent
将背景设置为透明。
3、tool button不显示边框
当我们设置button的icon时,发现icon的形状并不与button完全一致,如下图:
设置stylesheet
border-style: flat;
效果如下:
注意,一定要选择tool button,而不要选择push button,因为push button活动的时候会有一个虚线框。
要达到上图的效果,除了设置border-style:flat,可不可以将style设置为transparent呢?设置成transparent后,显示上看,效果是和上图的一样,但当按下时,button没有被覆盖的地方就会显示被按下时的颜色。
4、在父窗体的stylesheet中设置子部件的属性
假设有多个button,且它们的样式是一样的,那是不是需要一个个设置呢?不需要的,我们可以在父窗体中进行设置,那么子部件都会继承它的属性。
如果某个button的样式特殊,再单独修改就行了,下面举个实例,在父窗体的stylesheet中设置如下
QDialog{background:rgb(229, 255, 239)}
QMenuBar{background:url(:/image/headerbmp)}
QStatusBar{background:url(:/image/headerbmp)}
QPushButton{background:url(:/image/headerbmp)}
QLCDNumber{background:url(:/image/lcdbmp)}
QLabel{color: rgb(0, 0, 255)}
QDial{background-color: rgb(67, 67, 67)}
QGroupBox {
border-width:2px;
border-style:solid;
border-color:#FFFFFF;
}
QGroupBox{color: rgb(255,255, 255)}
QToolButton{border-style: flat;}
我先来抛砖引玉吧
1)内嵌VC开发的话,可以使用visualstudio的各种C++功能,文本编辑/自动补全/调试等等和普通的C++开发差不多,gui界面会调用designer插件,这个vc/eclipse/kdevelop/qtcreator都一样。相对来说比较方便。但是因为visualstudio不支持并行编译(至少vsnet2008还不支持),因此编译较慢。如果是写了makefile,或者利用qt生成vc格式的makefile,那么qtgitorisorg上有一个项目叫jom,和nmake基本兼容,但是支持并行编译,这个只能在命令行里面用
2)eclipse,给我的感觉怎么说呢,就不像是给C/C程序员使用的IDE,它其实也就是用qt插件创建gui,在编译过程中插入moc/uic/r处理。编译速度要看是在windows下还是linux下,如果是wndows,eclipse使用的是mingw工具链,因此编译速度很慢。linux下用的是g工具链,因此速度较快
3)kdevelop分为3x版本的和4x版本的,3x版本的比较成熟,但是有些功能不太容易使用,比如一个很简单的添加已存在的文件到项目中的 *** 作,用kdevelop就是没有很直观的方式。不是很好用
4)qtcreator,我觉得比kdevelop和eclipse好用,比visualstudio2008当然还是差一些。比如它的文件的编码格式(gb2312/iso88159-1/utf-8/big5)之类的设置,有时候似乎没有生效,我用kate或者gedit打开之后发现qtcreator编码格式转换没有起作用。
这些工具在gui编码和qt特有的功能(信号/槽、属性、moc/uic/r)方面基本相同,都是调用qtdesigner插件。在编译速度方面,eclipse(win32)=QTCREATOR(WIN32MINGW)qtcreator>eclipse=kdevelop
这两天跟着班级辅导,总有学生感到很疑惑,用ui designer设计出来的ui文件是如何使用的,下面我从一个例子来说明下,希望能对有这样疑惑的同学有帮助。
事实上,现在有了继承设计工具qtcreator,作为开发者再也不用考虑这个问题,因为当你用qtcreator创建一个工程的时候,qtcreator提供的框架已经替我们完成了这个任务。
咱们先从这个程序开始看:
新建一个工程,
在这个工程中用ui designer来设计了这样的一个界面
这是我按ctrl+alt+r运行出来的,如何使这个利用ui designer设计出来的ui文件能运行起来就是我们这篇文章要议论的内容。
先来看看qtcreator提供的默认框架是如何实现的。要研究qtcreator怎么实现,就得先看dialogh这个文件。
#ifndef DIALOG_H
#define DIALOG_H
#include <QDialog>
namespace Ui {
class Dialog;
}
class Dialog : public QDialog {
Q_OBJECT
public:
Dialog(QWidget parent = 0);
~Dialog();
protected:
void changeEvent(QEvent e);
private:
Ui::Dialog ui;
private slots:
void on_pushButton_clicked();
};
#endif // DIALOG_H
观察不难得出,在上文中我用红色包含的就是实现这个程序的关键。它声明一个类,将设计出来的ui界面作为该类的一个子对象,在其构造函数中,先完成对子对象的构造,再使用子对象ui调用其setupUi(this)函数实现ui的现实。
Dialog::Dialog(QWidget parent) :
QDialog(parent),
ui(new Ui::Dialog)
{
ui->setupUi(this);
}
看完上面的代码,我们来分析下到底为什么要这样来使用ui文件。
在没有qtcreator之前,给了我们一个ui文件,该如何调用?
针对于ui文件,不知道大家知不知道uic这个工具,这是qt继承的一个工具,它可以利用ui生产h文件。
uic dialogui –o tth
就生产了下面的文件:
/
Form generated from reading UI file 'dialogui'
Created: Sun May 9 17:29:42 2010
by: Qt User Interface Compiler version 462
WARNING! All changes made in this file will be lost when recompiling UI file!
/
#ifndef TT_H
#define TT_H
#include <QtCore/QVariant>
#include <QtGui/QAction>
#include <QtGui/QApplication>
#include <QtGui/QButtonGroup>
#include <QtGui/QDialog>
#include <QtGui/QHeaderView>
#include <QtGui/QLabel>
#include <QtGui/QPushButton>
QT_BEGIN_NAMESPACE
class Ui_Dialog
{
public:
QLabel label;
QPushButton pushButton;
void setupUi(QDialog Dialog)
{
if (Dialog->objectName()isEmpty())
Dialog->setObjectName(QString::fromUtf8("Dialog"));
Dialog->resize(115, 148);
label = new QLabel(Dialog);
label->setObjectName(QString::fromUtf8("label"));
label->setGeometry(QRect(10, 30, 91, 21));
QFont font;
fontsetPointSize(12);
fontsetBold(true);
fontsetWeight(75);
label->setFont(font);
pushButton = new QPushButton(Dialog);
pushButton->setObjectName(QString::fromUtf8("pushButton"));
pushButton->setGeometry(QRect(20, 80, 75, 23));
retranslateUi(Dialog);
QMetaObject::connectSlotsByName(Dialog);
} // setupUi
void retranslateUi(QDialog Dialog)
{
Dialog->setWindowTitle(QApplication::translate("Dialog", "Dialog", 0, QApplication::UnicodeUTF8));
label->setText(QApplication::translate("Dialog", "hello,wang", 0, QApplication::UnicodeUTF8));
pushButton->setText(QApplication::translate("Dialog", "close", 0, QApplication::UnicodeUTF8));
} // retranslateUi
};
namespace Ui {
class Dialog: public Ui_Dialog {};
} // namespace Ui
QT_END_NAMESPACE
#endif // TT_H
通过观察我们会发现uic自动将我们设计的ui文件,生成了一个类,在此例中为class Ui_Dialog。事实上也是这样,uic会自动会利用设计好的ui生成一个包含类Ui_的ui_h文件。那么在此例中,就会将我们设计好的dialog就会被uic文件解析,生成一个叫做ui_dialogh的文件,此文件中包含Ui_Dialog的类。
那么总结出来,要让ui design设计出来的界面显示出来,只要能设法调用Ui_Dialog类的setupUi函数就行了。
一种简单的方法,直接使用,重新写一个这样的main函数。
#include <QtGui/QApplication>
#include <QDialog>
#include "ui_dialogh"
int main(int argc, char argv[])
{
QApplication a(argc, argv);
Ui::Dialog ui;
QDialog d=new QDialog;
ui setupUi(d);
d->show();
return aexec();
}
第二种方法相对比较简单一点,就是将Ui::Dialog ui或Ui::Dialog ui写成一个新定义类的一个数据成员,也就是qtcreator提供的那种方法。
#include <QDialog>
#include "ui_dialogh"
class Dialog : public QDialog {
Q_OBJECT
public:
Dialog(QWidget parent = 0);
~Dialog();
protected:
void changeEvent(QEvent e);
private:
Ui::Dialog ui;
private slots:
void on_pushButton_clicked();
};
这样使用的时候需要注意的是在初始化的时候要先完成子对象的初始化,在其构造函数中重写构造函数。
Dialog::Dialog(QWidget parent) :
QDialog(parent),
ui(new Ui::Dialog)
{
ui->setupUi(this);
}
第三种方法是以Ui_Dialog类为基类,派生一个新类,在该类的初始化函数中调用setupUi。
#ifndef DIALOG_H
#define DIALOG_H
#include <QDialog>
#include "ui_dialogh"
class Dialog : public QDialog ,public Ui::Dialog
{
Q_OBJECT
public:
Dialog(QWidget parent = 0);
};
实现如下:
#endif // DIALOG_H
#include "dialogh"
#include "ui_dialogh"
Dialog::Dialog(QWidget parent) :
QDialog(parent),
Ui::Dialog()
{
setupUi(this);
}
希望通过讲解,大家能总结出该如何使用ui文件。无非就是利用默认工具uic自动产生的类,去调用该类的setui函数。第一种是直接使用,第二种是定义一个新类,声明一个ui子对象,第三种是将ui作为基类派生新的类。
以上就是关于windows客户端程序一般用什么IDE和什么编程语言编写全部的内容,包括:windows客户端程序一般用什么IDE和什么编程语言编写、常用的GUI开发工具有哪些_gui工具是什么、QtCreator怎么使用自己的类等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)