自适应屏幕分辨率的基类窗口(pb)

做一个自适应屏幕分辨率的窗口,当成一个应用程序中所有窗体的基类。这样整个程序可以很好的适应屏幕分辨率的改变。实现的原理很简单,就是在窗口打开的时候去RESIZE窗口和窗口中的控件大小,位置。参看下面的源代码,可以很容易的看懂。

1。新建一个窗口。

为窗口写一个函数f_resize()大部分工作就在这里。
无输入参数
返回值为整形:

environment env
integer ii_ScreenWidth,ii_ScreenHeight
double WRadio,HRadio,Radio
integer ii_WinBolderWidth,ii_WinBolderHeight
getenvironment(env)
ii_WinBolderWidth=this.width - this.WorkSpaceWidth()//取得窗体的边框宽度
ii_WinBolderHeight=this.height - this.WorkSpaceHeight()
ii_ScreenWidth=env.screenwidth
ii_ScreenHeight=env.screenheight
//compute the radio that need be resize

WRadio=ii_ScreenWidth/800 //标准认为屏幕分辨率为800*600
HRadio=ii_ScreenHeight/600//计算出屏幕相对800*600分辨率的变化量
Radio=Min(WRadio,HRadio)
if Radio=1.0 then //if the screen is default 800*600
 return 0
end if
this.hide()
this.width=(this.width - ii_WinBolderWidth)*Radio + ii_WinBolderWidth
this.height=(this.height - ii_WinBolderHeight)*Radio + ii_WinBolderHeight
integer i
dragobject temp//用于取各种控件

for i=1 to upperbound(this.control)
 temp=this.control[i]//调整大小,位置
 temp.width=temp.width*Radio
 temp.x=temp.x*Radio
 temp.y=temp.y*Radio
 temp.Height=temp.Height*Radio
 choose case typeof(temp)
  case tab!
   tab mtab
   mtab=temp
   mtab.textsize =  mtab.textsize*Radio//设置字体
  case commandbutton!
   commandbutton cb
   cb = temp
   cb.textsize =  cb.textsize*Radio

  case singlelineedit!
   singlelineedit sle
   sle = temp
   sle.textsize=sle.textsize*Radio
  case editmask!
   editmask em
   em = temp
   em.textsize =  em.textsize*Radio
 
  case statictext!
   statictext st
   st = temp
   st.textsize = st.textsize*Radio

  case datawindow! // datawindows get zoomed
   datawindow dw
   dw = temp
   dw.Object.DataWindow.zoom = string(int(Radio*100))//注意DATAWINDOW与其它控件的不同

  case picturebutton!
   picturebutton pb
   pb = temp
   pb.textsize =  pb.textsize*Radio

  case checkbox!
   checkbox cbx
   cbx = temp
   cbx.textsize =  cbx.textsize*Radio

  case dropdownlistbox!
   dropdownlistbox ddlb
   ddlb = temp
   ddlb.textsize =  ddlb.textsize*Radio

  case groupbox!
   groupbox gb
   gb = temp
   gb.textsize =  gb.textsize*Radio

  case listbox!
   listbox lb
   lb = temp
   lb.textsize  =  lb.textsize*Radio

  case multilineedit!
   multilineedit mle
   mle = temp
   mle.textsize = mle.textsize*Radio

  case radiobutton!
   radiobutton rb
   rb = temp
   rb.textsize =  rb.textsize*Radio

 end choose
next
this.show()
return 0

函数写好以后,在窗体的OPEN事件里调用该函数即可.

### 回答1: 在Qt中,你可以使用布局管理器来实现窗口自适应分辨率适配。 以下是一个例子: ``` #include <QApplication> #include <QVBoxLayout> #include <QWidget> int main(int argc, char *argv[]) { QApplication app(argc, argv); QWidget window; QVBoxLayout *layout = new QVBoxLayout(&window); // 在这里,你可以添加各种控件到布局中 window.setLayout(layout); window.show(); return app.exec(); } ``` 使用布局管理器,你可以很容易地实现自动适配,因为它会自动调整控件的大小和位置,以适应窗口的大小变化。 有多种布局管理器可用,如QHBoxLayout、QVBoxLayout、QGridLayout等,你可以根据你的需求选择最合适的布局管理器。 ### 回答2: 在Qt中,可以通过使用布局管理器和窗口大小事件来实现窗口自适应分辨率适配。 首先,我们可以选择适合自己的布局管理器,如垂直布局(QVBoxLayout)或水平布局(QHBoxLayout),以便自动调整窗口中的控件位置和大小。 然后,我们需要在窗口的构造函数中设置布局管理器,并将所有的控件添加到布局管理器中。如下所示: ```cpp MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent) { QVBoxLayout *layout = new QVBoxLayout; // 创建垂直布局管理器 QLabel *label = new QLabel("Hello, World!"); // 创建标签控件 layout->addWidget(label); // 将标签控件添加到布局管理器 QPushButton *button = new QPushButton("Submit"); // 创建按钮控件 layout->addWidget(button); // 将按钮控件添加到布局管理器 QWidget *centralWidget = new QWidget(this); // 创建一个主窗口控件 centralWidget->setLayout(layout); // 设置布局管理器为主窗口控件的布局 setCentralWidget(centralWidget); // 设置主窗口控件为窗口的中央控件 } ``` 接下来,需要监听窗口的大小事件,以便在窗口大小改变时重新布局控件。可以重写窗口类的`resizeEvent`函数,并在其中重新设置布局管理器的大小。如下所示: ```cpp void MainWindow::resizeEvent(QResizeEvent *event) { QMainWindow::resizeEvent(event); // 调用基类的 resizeEvent 函数 // 获取新的窗口大小 QSize newSize = event->size(); // 更新布局管理器的大小 centralWidget()->layout()->setGeometry(QRect({0, 0}, newSize)); } ``` 通过上述步骤,窗口的控件将会根据窗口的大小自动进行适配和调整。无论用户在不同的分辨率下打开窗口,控件都会根据界面的实际大小进行自适应。 这就是使用Qt实现窗口自适应分辨率适配的基本步骤。根据具体的需求,可以进一步调整布局管理器和控件的属性,以达到理想的自适应效果。 ### 回答3: 在Qt中,可以通过以下几个步骤来实现窗口自适应分辨率适配: 1. 获取当前屏幕的分辨率信息:可以使用QApplication类的primaryScreen()函数获取主屏幕的信息,然后使用QScreen类的geometry()函数获取屏幕的几何信息,包括宽度和高度。 2. 设置窗口大小:根据获取到的屏幕信息,可以设置窗口的初始大小。可以使用QWidget类的resize()函数设置窗口的宽度和高度,例如:widget->resize(screenGeometry.width() / 2, screenGeometry.height() / 2)。 3. 设置窗口位置:可以使用QWidget类的move()函数设置窗口的初始位置,通常将窗口居中显示。可以通过计算得到窗口在屏幕上的中心位置,例如:widget->move(screenGeometry.center() - widget.rect().center())。 4. 设置窗口的最大化和最小化策略:可以使用QWidget类的setWindowFlags()函数设置窗口的标志位,实现最大化和最小化功能。可以使用Qt::WindowMaximize和Qt::WindowMinimize标志位来实现最大化和最小化功能。 5. 监听窗口大小变化事件:可以通过重写QWidget类的resizeEvent()函数来监听窗口大小变化事件,根据实际需要做出相应的布局调整。 通过以上步骤,就可以实现窗口自适应分辨率适配。在程序启动时,窗口将根据屏幕的分辨率设置初始大小和位置,并可以根据窗口大小的变化做出相应的布局调整,以适应不同分辨率的屏幕。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值